using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Data.Sql;
using Microsoft.Practices.EnterpriseLibrary.Common;
using System.Configuration;
using Insifo.BE.Gen;

namespace Insifo.DL.Gen
{
    public class DLProcesoMensaje : DLTransaction, IDLTransaccion<BEProcesoMensaje>
    {
        #region Members

        /// <summary>
        /// Método Inserta un ADM_ProcesoMensaje 
        /// </summary>
        /// <returns>Devuelve una entidad</returns>

        public BEProcesoMensaje Insertar(BEProcesoMensaje pbe)
        {
            BEProcesoMensaje be = new BEProcesoMensaje();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_ProcesoMensaje_Insertar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;

                sqlDB.AddInParameter(dbCmd, "@ai_IdMensaje", DbType.Int32, pbe.IdMensaje);
                sqlDB.AddInParameter(dbCmd, "@ai_IdProceso", DbType.Int32, pbe.IdProceso);
                sqlDB.AddInParameter(dbCmd, "@as_Mensaje", DbType.String, pbe.Mensaje);
                sqlDB.AddInParameter(dbCmd, "@adt_FechaProceso", DbType.DateTime, pbe.FechaProceso);


                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.Id = DBValue.Get<int>(reader, "Id");
                        be.FechaCreacion = DBValue.Get<DateTime>(reader, "FechaCreacion");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }
        /// <summary>
        /// Método Actualiza un ADM_ProcesoMensaje 
        /// </summary>
        /// <returns>Devuelve una entidad</returns>

        public BEProcesoMensaje Actualizar(BEProcesoMensaje pbe)
        {
            BEProcesoMensaje be = new BEProcesoMensaje();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_ProcesoMensaje_Actualizar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
                sqlDB.AddInParameter(dbCmd, "@ai_IdMensaje", DbType.Int32, pbe.IdMensaje);
                sqlDB.AddInParameter(dbCmd, "@ai_IdProceso", DbType.Int32, pbe.IdProceso);
                sqlDB.AddInParameter(dbCmd, "@as_Mensaje", DbType.String, pbe.Mensaje);
                sqlDB.AddInParameter(dbCmd, "@adt_FechaProceso", DbType.DateTime, pbe.FechaProceso);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.Id = DBValue.Get<int>(reader, "Id");
                        be.FechaModificacion = DBValue.Get<DateTime>(reader, "FechaModificacion");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }

        ///<summary>
        /// Método Actualiza el ADM_ProcesoMensaje 
        ///</summary>
        ///<returns>Devuelve una entidad</returns> 

        public BEProcesoMensaje Eliminar(BEProcesoMensaje pbe)
        {
            BEProcesoMensaje be = new BEProcesoMensaje();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_ProcesoMensaje_Eliminar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
                sqlDB.AddInParameter(dbCmd, "@ai_IdMensaje", DbType.Int32, pbe.IdMensaje);
                sqlDB.AddInParameter(dbCmd, "@as_UsuarioModificacion", DbType.String, pbe.UsuarioModificacion);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.Id = DBValue.Get<int>(reader, "Id");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }

        ///<summary>
        /// Método Lista datos de la tabla ADM_ProcesoMensaje 
        ///</summary>
        ///<returns>Devuelve una Objeto Dataset</returns> 

        public DataSet Listar(BEProcesoMensaje pbe)
        {
            DataSet ds = new DataSet();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_ProcesoMensaje_Listar");
            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
                sqlDB.AddInParameter(dbCmd, "@ai_IdProceso", DbType.Int32, pbe.IdProceso);
                ds = sqlDB.ExecuteDataSet(dbCmd);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dbCmd.Dispose();
            }
            return ds;

        }

        ///<summary>
        /// Método obtiene dato de la tabla ADM_ProcesoMensaje 
        ///</summary>
        ///<returns>Devuelve una Objeto  </returns> 

        public BEProcesoMensaje Obtener(BEProcesoMensaje pbe)
        {
            BEProcesoMensaje be = new BEProcesoMensaje();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_ProcesoMensaje_Obtener");
            dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
            try
            {
                sqlDB.AddInParameter(dbCmd, "@ai_IdMensaje", DbType.Int32, pbe.IdMensaje);
                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.IdMensaje = DBValue.Get<Int32>(reader, "IdMensaje");
                        be.IdProceso = DBValue.Get<Int32>(reader, "IdProceso");
                        be.Mensaje = DBValue.Get<String>(reader, "Mensaje");
                        be.FechaProceso = DBValue.Get<DateTime>(reader, "FechaProceso");
                    }
                }

            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dbCmd.Dispose();
            }
            return be;

        }

        #endregion
    }
}